/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package verins.Utils;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.imageio.ImageIO;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;


/**
 *
 * @author hectdx
 */

public class ImprimirReportes  {

Connection conn;   



//clase generica para ejecutar cualquier reporte
//vNombParams -> nombre de los parametros que se pasan al reporte por ejm idEstado
//VValorParams-> valor del parametro anterior

    public void ejecutarReporte(String nombreJasper, List vNombParams, List vValorParams) throws ClassNotFoundException{
        try {
            String archivo = nombreJasper; //nombre del archivo jasper
            JasperReport masterReport = null;
            try {
                String rutaReal=getRealPath();
                masterReport = (JasperReport) JRLoader.loadObject(rutaReal+archivo);
            } catch (JRException e) {
                System.out.println("Error cargando el reporte maestro: " + e.getMessage());
                System.exit(3);
            }
            
            conn=new Conexion().getConexion();
            Map parametro = new HashMap();
            if (vNombParams!=null)
                for (int i=0;i<vNombParams.size();i++){
                    parametro.put(vNombParams.get(i).toString(), vValorParams.get(i));
                }
            //logo verinscribe
            InputStream logo=cargarImagenLogo();
            parametro.put("pLogo", logo); 
            //Reporte diseñado y compilado con iReport
            //se le pasa en empty source pq no se esta susando conex a BD
            JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport, parametro, conn);
            //Se lanza el Viewerde Jasper, no termina aplicación al salir
            JasperViewer jviewer = new JasperViewer(jasperPrint, false);
            jviewer.setTitle("Reporte");
            jviewer.setVisible(true);

           // JRExporter exporter = new JRPdfExporter();
            //exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
           // exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("/home/hectdx/x.pdf"));
            //exporter.exportReport();
        } catch (Exception j) {
            System.out.println("Mensaje de Error:" + j.getMessage());
        }
    }
    
      
    public String getRealPath(){
          File directory = new File ("x");
          String ruta="";
             try {
               ruta=directory.getCanonicalPath();
               ruta=ruta.substring(0, ruta.length()-1)+"reportes/";
               int i=ruta.indexOf("/dist");
               if (i>-1){
                   ruta=ruta.replace("/dist", "");
               }
               System.out.println("n:"+ruta);
               return ruta;
               
             }catch(Exception e) {
             System.out.println("Exceptione is ="+e.getMessage());
             return "/";
             }
    }
    
    public InputStream cargarImagenLogo(){
        String ruta = getRealPath();
        InputStream logoInputStream = null;                       
        try { 
            
            ruta=ruta+"logoV.jpg";
            BufferedImage imagen = ImageIO.read(new File(ruta));
            
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ImageIO.write(imagen, "jpg", out);
            byte[] imgData = out.toByteArray();
            logoInputStream = new ByteArrayInputStream(imgData);

        } catch (Exception e) {  
            System.out.println(e.getMessage());
        }     
        return logoInputStream;
    }
    
    public static void main(String arg []){
        System.out.println("ini main");
         
        try{
            List vNom=new ArrayList();
            vNom.add("pEstado");
            List vVal=new ArrayList();
            vVal.add(0);
            
            new ImprimirReportes().ejecutarReporte( "report2.jasper", vNom,vVal);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        System.out.println("fin main");
    }
  
    
}






